/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.asportoonline.integration;

import java.util.List;
import javax.ejb.Local;
import org.asportoonline.entities.Categoria;

/**
 * Interfaccia contenente le intestazioni dei metodi da sviluppare per interfacciarsi all'entità
 * persistente Categoria.
 * 
 * @author fe
 * @see Categoria
 */
@Local
public interface CategoriaFacade {

    /**
     * Inserisce una nuova categoria, che deve avere un nome univoco.
     * 
     * @param categoria 
     * @see Categoria
     */
    void create(Categoria categoria);

    /**
     * Modifica una categoria esistente.
     * 
     * @param categoria 
     * @see Categoria
     */
    void edit(Categoria categoria);

    /**
     * Rimuove una categoria.
     * 
     * @param categoria 
     * @see Categoria
     */
    void remove(Categoria categoria);

    /**
     * Cerca una categoria in base all'ID.
     * 
     * @param id ID della categoria.
     * @return se l'ID esiste restituisce la Categoria, altrimenti restituisce null.
     * @see Categoria
     */
    Categoria find(Object id);

    /**
     * Cerca tutte le categorie presenti nel database.
     * 
     * @return restituisce una lista contenente tutte le categorie presenti nel database; 
     * se non ce ne sono restituisce null.
     * @see Categoria
     */
    List<Categoria> findAll();

    /**
     * Cerca una categoria in base al nome.
     * 
     * @param nomeCategoria  nome della categoria.
     * @return se il nome esiste restituisce la Categoria, altrimenti restituisce null.
     * @see Categoria
     */
    Categoria find(String nomeCategoria);
    
    
    /**
     * Cerca i nomi di tutte le categorie presenti nel database.
     * 
     * @return restituisce una lista contenente i nomi di tutte le categorie presenti nel database; 
     * se non ce ne sono restituisce null.
     */
    List<String> findAllNames();    
    
}
